package com.ctshk.rpc.system.service;

import com.ctshk.common.dto.Result;
import com.ctshk.rpc.system.dto.PermissionDataDTO;
import com.ctshk.rpc.system.dto.PermissionUserMenuDTO;
import com.ctshk.rpc.system.req.PermissionDataReq;

import java.util.List;
import java.util.Set;

/**
 * <p>
 * 权限 服务类
 * </p>
 *
 * @author 谢诗宏
 * @since 2020-12-25
 */
public interface ISysPermissionService {

    /**
     * 设置菜单权限
     * @param menuIds
     * @param userId
     * @param menuType
     * @param optUserId
     * @param isAdd 是否清空原来的权限
     * @return
     */
    boolean setMenuPermission(long topId, List<Long> menuIds, long userId, Integer menuType, long optUserId,boolean isAdd);

    /**
     * 设置菜单功能按钮数据权限
     * @param permissionDataReq
     * @param optUserId
     * @return
     */
    boolean setMenuPermissionData(PermissionDataReq permissionDataReq, long optUserId);

    /**
     * 查询他人权限并快速同步设置指定账号权限
     * @param othersUserId
     * @param userId
     * @param optUserId
     * @return
     */
    boolean setQuick(long othersUserId, long userId, long optUserId);

    /**
     * 查询指定用户有效权限菜单
     * @param sysType
     * @param menuId
     * @param userId
     * @return
     */
    PermissionUserMenuDTO queryMenu(Integer sysType, long menuId, long userId);

    /**
     * 查询菜单功能数据权限类型
     * @param menuId
     * @param userId
     * @return
     */
    PermissionDataDTO queryPermissionData(long menuId, long userId);

    /**
     * 查询菜单功能数据权限-此api专供给其他服务查询列表权限时使用
     * @param menuId    当前菜单id
     * @param userId    当前用户id
     * @return
     */
    Result<List<Long>> queryPermission(long menuId, long userId);

    /**
     * 查询拥有这个菜单权限的用户IDS（能看到这个菜单的用户）
     * @param menuId    菜单id
     * @return
     */
    Set<Long> queryPermissionUserIdByMenuId(long menuId);
}
